package com.roast.util;

import com.roast.domain.DomainObject;
import java.util.ArrayList;

public class QueryObject {

    public QueryObject() {
        parametarList = new ArrayList<>();
    }

    private DomainObject domaninObject;
    private long signal;
    private String query;

    private ArrayList<Parametar> parametarList;

    public DomainObject getDomaninObject() {
        return domaninObject;
    }

    public void setDomaninObject(DomainObject domaninObject) {
        this.domaninObject = domaninObject;
    }

    public long getID() {
        return domaninObject.getId();
    }

    @SuppressWarnings("rawtypes")
    public Class objectClass() {
        return domaninObject.objectClass();
    }

    public long getSignal() {
        return signal;
    }

    public void setSignal(long signal) {
        this.signal = signal;
    }

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }

    public ArrayList<Parametar> getParametarList() {
        return parametarList;
    }

    public void setParametarList(ArrayList<Parametar> parametarList) {
        this.parametarList = parametarList;
    }

    public boolean addParametar(String name, Object value) {
        Parametar parametar = new Parametar();
        parametar.setName(name);
        parametar.setValue(value);

        try {
            parametarList.add(parametar);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public Parametar getParametarByName(String parametarName) {
        if (!parametarList.isEmpty()) {
            for (int i = 0; i < parametarList.size(); i++) {
                Parametar parametar = parametarList.get(i);
                if (parametarName.equals(parametarName)) {
                    return parametar;
                }
            }
        }
        return null;
    }

    public boolean setParametarValueByIndex(int index, Object value) {
        if (!parametarList.isEmpty()) {
            try {
                parametarList.get(index).setValue(value);
                return true;
            } catch (IndexOutOfBoundsException ex) {
                System.out.println("QueryObject:setParametarValue:[" + ex + "]");
            }
        }
        return false;
    }

    public boolean setParametarValueByName(String parametarName, Object value) {
        if (!parametarList.isEmpty()) {
            for (int i = 0; i < parametarList.size(); i++) {
                Parametar parametar = parametarList.get(i);
                if (parametar.getName().equals(parametarName)) {
                    parametarList.get(i).setValue(value);
                    return true;
                }
            }
        }
        return false;
    }

}
